package com.xywl.escort.net.api.service;

import com.xywl.escort.bean.AddCashFlowReq;
import com.xywl.escort.bean.AddShoppingCartReq;
import com.xywl.escort.bean.AddUserAutoInfoResp;
import com.xywl.escort.bean.AddUserAutoReq;
import com.xywl.escort.bean.AddUserBankCardReq;
import com.xywl.escort.bean.AddrListResp;
import com.xywl.escort.bean.AddrReq;
import com.xywl.escort.bean.BandCardListResp;
import com.xywl.escort.bean.BannerReq;
import com.xywl.escort.bean.BannerResp;
import com.xywl.escort.bean.BaseReq;
import com.xywl.escort.bean.BaseResp;
import com.xywl.escort.bean.BuyAgainResp;
import com.xywl.escort.bean.CommentAddReq;
import com.xywl.escort.bean.CommentsReq;
import com.xywl.escort.bean.CommentsResp;
import com.xywl.escort.bean.CouponDetailResp;
import com.xywl.escort.bean.CouponListReq;
import com.xywl.escort.bean.CouponListResp;
import com.xywl.escort.bean.DefaultResp;
import com.xywl.escort.bean.DelAddressReq;
import com.xywl.escort.bean.DeliveryApplyReq;
import com.xywl.escort.bean.DeliveryOrderResp;
import com.xywl.escort.bean.FindBankBaseInfoListResp;
import com.xywl.escort.bean.FindIsFitPayPwdResp;
import com.xywl.escort.bean.FindUserBankCardListReq;
import com.xywl.escort.bean.FindUserCashAmountResp;
import com.xywl.escort.bean.ForgetPwdReq;
import com.xywl.escort.bean.GetAddressListReq;
import com.xywl.escort.bean.GetOrderInfoResp;
import com.xywl.escort.bean.GetSmsCodeReq;
import com.xywl.escort.bean.GetUserBankCardTokenReq;
import com.xywl.escort.bean.GoodDetailReq;
import com.xywl.escort.bean.GoodDetailResp;
import com.xywl.escort.bean.GoodListReq;
import com.xywl.escort.bean.IsNewMessageResp;
import com.xywl.escort.bean.IsPacketResp;
import com.xywl.escort.bean.IsRedPacketResp;
import com.xywl.escort.bean.RedPacketReq;
import com.xywl.escort.bean.LoginReq;
import com.xywl.escort.bean.LoginResp;
import com.xywl.escort.bean.LogisticsResp;
import com.xywl.escort.bean.MarketListResp;
import com.xywl.escort.bean.MarketResp;
import com.xywl.escort.bean.MessageResp;
import com.xywl.escort.bean.NoticeResp;
import com.xywl.escort.bean.OperationRecordResp;
import com.xywl.escort.bean.PayApplyResp;
import com.xywl.escort.bean.PayConfirmReq;
import com.xywl.escort.bean.PreBuyReq;
import com.xywl.escort.bean.PreBuyResp;
import com.xywl.escort.bean.ProductPayApplyReq;
import com.xywl.escort.bean.ProductPayConfirmReq;
import com.xywl.escort.bean.ProjectDeliveryDetailResp;
import com.xywl.escort.bean.ProjectDetailResp;
import com.xywl.escort.bean.ProjectListResp;
import com.xywl.escort.bean.ProjectLogisticsResp;
import com.xywl.escort.bean.ProjectOrderListResp;
import com.xywl.escort.bean.ProjectSpecResp;
import com.xywl.escort.bean.PurchaseOrderDetailResp;
import com.xywl.escort.bean.PurchaseOrderListReq;
import com.xywl.escort.bean.PurchaseOrderListResp;
import com.xywl.escort.bean.RankingListReq;
import com.xywl.escort.bean.RankingListResp;
import com.xywl.escort.bean.RegisterReq;
import com.xywl.escort.bean.RepoOrderResp;
import com.xywl.escort.bean.RepurchaseReq;
import com.xywl.escort.bean.SetPayPwdReq;
import com.xywl.escort.bean.ShoppingCartReq;
import com.xywl.escort.bean.ShoppingCartResp;
import com.xywl.escort.bean.ShoppingCartUpdateReq;
import com.xywl.escort.bean.ShoppingCartUpdateResp;
import com.xywl.escort.bean.SpecResp;
import com.xywl.escort.bean.SubmitOrderReq;
import com.xywl.escort.bean.SubmitOrderResp;
import com.xywl.escort.bean.SubscribeBuyReq;
import com.xywl.escort.bean.SubscribeBuyResp;
import com.xywl.escort.bean.SubscribeOrderDetailResp;
import com.xywl.escort.bean.SubscribeOrderResp;
import com.xywl.escort.bean.UpdateLoginPwdReq;
import com.xywl.escort.bean.UpdateMsgStatusReq;
import com.xywl.escort.bean.UpdatePayPwdReq;
import com.xywl.escort.bean.UpdateUserBankCardStatusReq;
import com.xywl.escort.bean.UpdateUserInfoReq;
import com.xywl.escort.bean.UpdateUserPhoneReq;
import com.xywl.escort.bean.UpgradeReq;
import com.xywl.escort.bean.UpgradeResp;
import com.xywl.escort.bean.UploadImageResp;
import com.xywl.escort.bean.UserAutoInfoResp;
import com.xywl.escort.bean.UserExitReq;
import com.xywl.escort.bean.UserFundInfoResp;
import com.xywl.escort.bean.UserFundsListResp;
import com.xywl.escort.bean.UserInfoResp;
import com.xywl.escort.bean.VerifyPayPwdReq;

import io.reactivex.Flowable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

public interface ApiServer {

    String mallService = "api/mall/";
    String baseService = "api/base/";
    String userService = "api/user/";
    String projectService = "api/project/";
    String activityService = "api/activity/";
//    String dataService = "api/data/";
//    String messageService = "api/message/";

    //-----------mallService---start--------------
    @POST(mallService + "front/goods/bazaar")
    Flowable<MarketResp> bazaar(@Body BaseReq req);

    @POST(mallService + "front/goods/list")
    Flowable<MarketListResp> goodList(@Body GoodListReq req);

    @POST(mallService + "front/goods/detail")
    Flowable<GoodDetailResp> goodDetail(@Body GoodDetailReq req);

    @POST(mallService + "front/goods/spec")
    Flowable<SpecResp> goodsSpec(@Body GoodDetailReq req);

    @POST(mallService + "front/shoppingCar/add")
    Flowable<BaseResp> addShoppingCart(@Body AddShoppingCartReq req);

    @POST(mallService + "front/shoppingCar/list")
    Flowable<ShoppingCartResp> shoppingCartList(@Body ShoppingCartReq req);

    @POST(mallService + "front/shoppingCar/del")
    Flowable<BaseResp> delShoppingCart(@Body ShoppingCartReq req);

    @POST(mallService + "front/addr/list")
    Flowable<AddrListResp> addrList(@Body GetAddressListReq req);

    @POST(mallService + "front/addr/update")
    Flowable<BaseResp> addrUpdate(@Body AddrReq req);

    @POST(mallService + "front/addr/default")
    Flowable<DefaultResp> addrDefault(@Body BaseReq req);

    @POST(mallService + "front/order/buyAgain")
    Flowable<BuyAgainResp> buyAgain(@Body BaseReq req);

    @POST(mallService + "front/addr/add")
    Flowable<BaseResp> addrAdd(@Body AddrReq req);

    @POST(mallService + "front/addr/del")
    Flowable<BaseResp> addrDel(@Body DelAddressReq req);

    @POST(mallService + "front/shoppingCar/update")
    Flowable<ShoppingCartUpdateResp> shoppingCartUpdate(@Body ShoppingCartUpdateReq req);

    @POST(mallService + "front/order/add")
    Flowable<SubmitOrderResp> submitOrder(@Body SubmitOrderReq req);

    @POST(mallService + "front/order/list")
    Flowable<PurchaseOrderListResp> orderList(@Body PurchaseOrderListReq req);

    @POST(mallService + "front/order/detail")
    Flowable<PurchaseOrderDetailResp> orderDetail(@Body BaseReq req);

    @POST(mallService + "front/order/cancel")
    Flowable<BaseResp> orderCancel(@Body BaseReq req);

    @POST(mallService + "front/order/del")
    Flowable<BaseResp> orderDelete(@Body BaseReq req);

    @POST(mallService + "front/order/reminding")
    Flowable<BaseResp> orderRemind(@Body BaseReq req);

    @POST(mallService + "front/order/confirm")
    Flowable<BaseResp> orderConfirm(@Body BaseReq req);

    @POST(mallService + "front/order/logistics")
    Flowable<LogisticsResp> orderLogistics(@Body BaseReq req);

    @POST(mallService + "front/comment/list")
    Flowable<CommentsResp> frontComments(@Body CommentsReq req);

    @POST(mallService + "front/comment/add")
    Flowable<BaseResp> addComments(@Body CommentAddReq req);

    @POST(mallService + "front/pay/apply")
    Flowable<BaseResp> productPayApply(@Body ProductPayApplyReq req);

    @POST(mallService + "front/pay/confirmation")
    Flowable<BaseResp> productPayConfirm(@Body ProductPayConfirmReq req);
    //-----------mallService---end--------------


    //-----------baseService---start--------------
    @Multipart
    @POST(baseService + "upload/uploadImage")
    Flowable<UploadImageResp> uploadImage(@Part MultipartBody.Part part);
    //-----------baseService---end--------------


    //-----------userService---start--------------
    @POST(userService + "user/findMessageList")
    Flowable<MessageResp> messageList(@Body BaseReq req);

    @POST(userService + "user/updateMessageStatus")
    Flowable<BaseResp> updateMessageStatus(@Body UpdateMsgStatusReq req);

    @POST(userService + "user/findIsNewMessage")
    Flowable<IsNewMessageResp> findIsNewMessage(@Body BaseReq req);

    @POST(userService + "user/findUserBankCardList")
    Flowable<BandCardListResp> findUserBankCardList(@Body FindUserBankCardListReq req);

    @POST(userService + "user/findUserCashAmount")
    Flowable<FindUserCashAmountResp> findUserCashAmount(@Body BaseReq req);

    @POST(userService + "user/updaetUserBankCardDefStatus")
    Flowable<BaseResp> updateUserBankCardDefStatus(@Body UpdateUserBankCardStatusReq req);

    @POST(userService + "user/findUserFundsList")
    Flowable<UserFundsListResp> findUserFundsList(@Body BaseReq req);

    @POST(userService + "user/findUserFundsById")
    Flowable<UserFundInfoResp> findUserFundsById(@Body BaseReq req);

    @POST(userService + "user/userRegister")
    Flowable<BaseResp> register(@Body RegisterReq req);

    @POST(userService + "user/userLogin")
    Flowable<LoginResp> login(@Body LoginReq req);

    @POST(userService + "user/getSmsCode")
    Flowable<BaseResp> getSmsCode(@Body GetSmsCodeReq req);

    @POST(userService + "user/getUserBankCardToken")
    Flowable<BaseResp> getUserBankCardToken(@Body GetUserBankCardTokenReq req);

    @POST(userService + "user/findBankBaseInfoList")
    Flowable<FindBankBaseInfoListResp> findBankBaseInfoList(@Body BaseReq req);

    @POST(userService + "user/checkUserPayPassword")
    Flowable<BaseResp> verifyPayPwd(@Body VerifyPayPwdReq req);

    @POST(userService + "user/addUserBankCard")
    Flowable<BaseResp> addUserBankCard(@Body AddUserBankCardReq req);

    @POST(userService + "user/findUserInfoById")
    Flowable<UserInfoResp> findUserInfoById(@Body BaseReq req);

    @POST(userService + "user/updateUserInfo")
    Flowable<BaseResp> updateUserInfo(@Body UpdateUserInfoReq req);

    @POST(userService + "user/updateUserPhone")
    Flowable<BaseResp> updateUserPhone(@Body UpdateUserPhoneReq req);

    @POST(userService + "user/findIsFitPayPwd")
    Flowable<FindIsFitPayPwdResp> isSetPayPwd(@Body BaseReq req);

    @POST(userService + "user/forgetLoginPwd")
    Flowable<BaseResp> forgetLoginPwd(@Body ForgetPwdReq req);

    @POST(userService + "user/restUserPwd")
    Flowable<BaseResp> restUserPwd(@Body ForgetPwdReq req);

    @POST(userService + "user/updateLoginPwd")
    Flowable<BaseResp> updateLoginPwd(@Body UpdateLoginPwdReq req);

    @POST(userService + "user/updateUserPayPwd")
    Flowable<BaseResp> updateUserPayPwd(@Body UpdatePayPwdReq req);

    @POST(userService + "user/findUserAutoByUserId")
    Flowable<UserAutoInfoResp> findUserAutoByUserId(@Body BaseReq req);

    @POST(userService + "user/addUserAutoInfo")
    Flowable<AddUserAutoInfoResp> addUserAutoInfo(@Body AddUserAutoReq req);

    @POST(userService + "user/userExit")
    Flowable<BaseResp> userExit(@Body UserExitReq req);

    @POST(userService + "user/addUserPayPwd")
    Flowable<BaseResp> addUserPayPwd(@Body SetPayPwdReq req);

    @POST(userService + "user/addCashFlow")
    Flowable<BaseResp> addCashFlow(@Body AddCashFlowReq req);
    //-----------userService---end--------------


    //-----------projectService---start--------------
    @POST(projectService + "project/headerList")
    Flowable<ProjectListResp> headerList(@Body BaseReq req);

    @POST(projectService + "project/listForFront")
    Flowable<ProjectListResp> listForFront(@Body BaseReq req);

    @POST(projectService + "project/findOneForFront")
    Flowable<ProjectDetailResp> findOneForFront(@Body BaseReq req);

    @POST(projectService + "subscribe/rankingList")
    Flowable<RankingListResp> rankingList(@Body RankingListReq req);

    @POST(projectService + "buyback/myList")
    Flowable<RepoOrderResp> repoOrderList(@Body BaseReq req);

    @POST(projectService + "projectDelivery/myList")
    Flowable<DeliveryOrderResp> deliveryOrderList(@Body BaseReq req);

    @POST(projectService + "subscribe/myList")
    Flowable<SubscribeOrderResp> subscribeOrderList(@Body BaseReq req);

    @POST(projectService + "userProject/myList")
    Flowable<ProjectOrderListResp> projectOrderList(@Body BaseReq req);

    @POST(projectService + "buyback/myDel")
    Flowable<BaseResp> repoDelOrder(@Body BaseReq req);

    @POST(projectService + "projectDelivery/myDel")
    Flowable<BaseResp> deliveryDelOrder(@Body BaseReq req);

    @POST(projectService + "projectDelivery/remind")
    Flowable<BaseResp> deliveryRemindOrder(@Body BaseReq req);

    @POST(projectService + "projectDelivery/comfirm")
    Flowable<BaseResp> deliveryConfirm(@Body BaseReq req);

    @POST(projectService + "subscribe/cancel")
    Flowable<BaseResp> subscribeCancel(@Body BaseReq req);

    @POST(projectService + "subscribe/myDetail")
    Flowable<SubscribeOrderDetailResp> subscribeDetail(@Body BaseReq req);

    @POST(projectService + "subscribe/getOrderInfo")
    Flowable<GetOrderInfoResp> getOrderInfo(@Body BaseReq req);

    @POST(projectService + "subscribe/myDel")
    Flowable<BaseResp> subscribeDelete(@Body BaseReq req);

    @POST(projectService + "projectDeliveryExpress/detail")
    Flowable<ProjectLogisticsResp> deliveryLogisticsOrder(@Body BaseReq req);

    @POST(projectService + "projectDelivery/myDetail")
    Flowable<ProjectDeliveryDetailResp> deliveryDetail(@Body BaseReq req);

    @POST(projectService + "projectStandBig/list")
    Flowable<ProjectSpecResp> bigList(@Body RankingListReq req);

    @POST(projectService + "projectDelivery/apply")
    Flowable<BaseResp> deliveryApply(@Body DeliveryApplyReq req);

    @POST(projectService + "buyback/applyBuyback")
    Flowable<BaseResp> repurchaseApply(@Body RepurchaseReq req);

    @POST(projectService + "userInvestLog/list")
    Flowable<OperationRecordResp> operationRecord(@Body RankingListReq req);

    @POST(projectService + "subscribe/preBuy")
    Flowable<PreBuyResp> preBuy(@Body PreBuyReq req);

    @POST(projectService + "subscribe/buy")
    Flowable<SubscribeBuyResp> subscribeBuy(@Body SubscribeBuyReq req);

    @POST(projectService + "subscribe/payApply")
    Flowable<PayApplyResp> payApply(@Body VerifyPayPwdReq req);

    @POST(projectService + "subscribe/payConfirm")
    Flowable<BaseResp> payConfirm(@Body PayConfirmReq req);
    //-----------projectService---end--------------


    //-----------activityService---start--------------
    @POST(activityService + "activity/focusPicture/list")
    Flowable<BannerResp> focusPicture(@Body BannerReq req);

    @POST(activityService + "activity/notice/list")
    Flowable<NoticeResp> noticeList(@Body BaseReq req);

    @POST(activityService + "activity/redPacketReceive/isPacke")
    Flowable<IsPacketResp> isPacket(@Body CouponListReq req);

    @POST(activityService + "activity/redPacketReceive/listPacke")
    Flowable<CouponListResp> listPacke(@Body CouponListReq req);

    @POST(activityService + "activity/redPacketReceive/selectById")
    Flowable<CouponDetailResp> redPacketDetail(@Body BaseReq req);

    @POST(activityService + "activity/appVersion/upgrade")
    Flowable<UpgradeResp> upgrade(@Body UpgradeReq req);

    @POST(activityService + "activity/redPacketReceive/isRedPacket")
    Flowable<IsRedPacketResp> isRedPacket(@Body RedPacketReq req);

    @POST(activityService + "activity/redPacketReceive/processRedPacket")
    Flowable<BaseResp> processRedPacket(@Body RedPacketReq req);
    //-----------activityService---end--------------

}
